//
// Created by ✎﹏ℳ๓独赏 ☆独醉 on 2023/2/24.
//
#include <stdio.h>

int main() {
    //操作符
    printf("Operator test:\n");
    //%
    printf("%c:\t", '%');
    printf("5 / 3 = %d\t", 5 / 2);
    printf("5 % 2 = %d\n\n", 5 % 2);




    /*
     * <<--左移操作符
     * >>--右移操作符
     * 移（二进制位）位操作符
    */
    short i = 1;
    printf("%c%c:\t", '<','<');
    /*
     * i:0000 0000 0000 0001
     * i << 1:0000 0000 0000 0010
     */
    printf("i << 1 = %d\n", i << 1);

    short j = 2;
    printf("%c%c:\t", '>','>');
    /*
     * j:0000 0000 0000 0010
     * j >> 1:0000 0000 0000 0001
     */
    printf("j >> 1 = %d\n\n", j >> 1);



    /*
     * 位操作
     *  &--按位与--同1为1，否则为0
     *  |--按位或--有1为1，否则为0
     *  ^--按位异或--同位且同值为0，同位异值为1
     */
    short a=2;
    short b=5;
    /*
     * a:0000 0000 0000 0010
     * b:0000 0000 0000 0101
     * a & b:0000 0000 0000 0000
     */
    printf("%c:\t",'&');
    printf("a & b = %d\n",a&b);

    /*
     * a:0000 0000 0000 0010
     * b:0000 0000 0000 0101
     * a | b:0000 0000 0000 00111
     */
    printf("%c:\t",'|');
    printf("a | b = %d\n",a|b);

    /*
     * a:0000 0000 0000 0010
     * b:0000 0000 0000 0101
     * a ^ b:0000 0000 0000 00111
     *
     * i:1101
     * j:1110
     * i ^ J:0011
     */
    printf("%c:\t",'^');
    printf("a ^ b = %d\n",a^b);
    printf("13 ^ 14=%d\n\n",13^14);

    /*
     * 复合赋值符：+=，*=，%=，&=，<<=...
     * 单目操作符：!（逻辑反操作），-（负号），+（正号），&（取地址操作符），--，++，sizeof（计算变量或类型所占空间大小，单位：字节），*（解引用），()（强制类型转换）,~（按位取反）
     * 双目操作符：+，-，*，/....
     * 三目操作符：
     */
    printf("!10 = %d\n",!10);
    printf("!0 = %d\n",!0);
    printf("Test complete\n\n\n");


    //计算数组元素个数
    int arr[] = {0,1,2,3,4,5,6,7,8,9};
    int sz = 0;
    int test = sizeof(arr);
    sz = sizeof(arr)/sizeof(arr[0]);
    printf("Number of array elements:%d\n",sz);
    printf("Number of array elements:%d\n",test);
    return 0;
}